﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGERP_Entidades;
using SIGERP_Negocio;
using System.Data.SqlClient;

namespace SIGERP_Presentacion
{
    public partial class frmClienteActualizar : Form
    {
        private ErrorProvider ep = new ErrorProvider();
        private Cliente c;

        public frmClienteActualizar()
        {
            InitializeComponent();
        }

        public frmClienteActualizar(Cliente cliente)
        {
            c = cliente;
            InitializeComponent();
            ActiveControl = cmbTipoDocumento;
            cmbTipoDocumento.SelectedItem = cliente.tipodocumento;
            dtpFechaNacimiento.Value = c.fecha_nacimiento;
            txtCodigoCliente.Text = c.cod_cliente.ToString();
            txtApellido.Text = c.apellido.ToString();
            txtCalle.Text = c.calle.ToString();
            if (c.celular != 0) txtCelular.Text = c.celular.ToString();
            txtDepartamento.Text = c.departamento.ToString();
            txtEmail.Text = c.email.ToString();
            txtNombre.Text = c.nombre.ToString();
            txtNumero.Text = c.numero;
            txtNumeroDocumento.Text = c.numero_documento.ToString();
            txtPiso.Text = c.piso.ToString();
            if (c.telefono != 0) txtTelefono.Text = c.telefono.ToString();

            ActiveControl = cmbTipoDocumento;

            //Combo sexo
            cmbSexo.SelectedIndex = -1;
            if (c.sexo != "") cmbSexo.SelectedItem = c.sexo;

            // Combo Habilitado
            if (c.habilitado == true)
            {
                cmbHabilitado.SelectedItem = "HABILITADO";
            }
            else
            {
                cmbHabilitado.SelectedItem = "DESHABILITADO";
            }


            //Combo Tipo Documento
            List<TipoDocumento> tiposdocumento = TiposDocumento.GetAll();
            foreach (TipoDocumento t in tiposdocumento)
            {
                cmbTipoDocumento.Items.Add(t);
            }
            if (cmbTipoDocumento.Items.Count > 0)
                cmbTipoDocumento.SelectedIndex = 0;

            foreach (TipoDocumento td in cmbTipoDocumento.Items)
            {
                if (td.id_tipo_documento == c.tipodocumento.id_tipo_documento) cmbTipoDocumento.SelectedItem = td;
            }

            //Combo Pais
            List<Pais> paises = Paises.GetAll();
            foreach (Pais p in paises)
            {
                cmbPais.Items.Add(p);
            }
            if (cmbPais.Items.Count > 0)
                cmbPais.SelectedIndex = 0;
            foreach (Pais pai in cmbPais.Items)
            {
                if (cliente.ciudad.provincia.pais.id == pai.id) cmbPais.SelectedItem = pai;
            }


            if (((Pais)cmbPais.SelectedItem).id != 0)
            {
                foreach (Provincia p in cmbProvincia.Items)
                {
                    if (cliente.ciudad.provincia.id == p.id)
                        cmbProvincia.SelectedItem = p;
                }

            }

            foreach (Ciudad ciud in cmbLocalidad.Items)
            {
                if (cliente.ciudad.id == ciud.id)
                {
                    cmbLocalidad.SelectedItem = ciud;
                }
            }

            //Combo Nacionalidad
            List<Pais> nacionalidades = Paises.GetAll();
            foreach (Pais n in nacionalidades)
            {
                cmbNacionalidad.Items.Add(n);
            }
            if (cmbNacionalidad.Items.Count > 0)
                cmbNacionalidad.SelectedIndex = 0;

            foreach (Pais pa in cmbNacionalidad.Items)
            {
                if (pa.id == cliente.nacionalidad.id) cmbNacionalidad.SelectedItem = pa;
            }

            //Combo Estado Civil
            List<EstadoCivil> estadosciviles = EstadosCiviles.buscarEstadosCiviles();
            EstadoCivil estadocivilvacio = EstadosCiviles.buscarEstadoCivil(0);
            foreach (EstadoCivil es in estadosciviles)
            {
                cmbEstadoCivil.Items.Add(es);
            }
            if (cmbEstadoCivil.Items.Count > 0)
                cmbEstadoCivil.SelectedIndex = 0;

            foreach (EstadoCivil est in cmbEstadoCivil.Items)
            {
                if (est.id_estado_civil == cliente.estado_civil.id_estado_civil) cmbEstadoCivil.SelectedItem = est;
            }
        }

        private void frmClienteActualizar_Load(object sender, EventArgs e)
        {

        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private bool esNumerico(String cad)
        {
            try
            {
                Convert.ToInt32(cad);
                return true;
            }
            catch (Exception)
            {
                return false;
            }

        }
        
        private void actualizarCliente(Cliente c)
        {
            Ciudad ciudadvacia = Ciudades.GetOne(0);

            //Obligatorios
            c.tipodocumento = (TipoDocumento)cmbTipoDocumento.SelectedItem;
            c.numero_documento = txtNumeroDocumento.Text.ToUpper();
            if (dtpFechaNacimiento.Value != null) c.fecha_nacimiento = (DateTime)dtpFechaNacimiento.Value;
            else c.fecha_nacimiento=null;
            c.sexo = cmbSexo.SelectedItem.ToString();
            c.apellido = txtApellido.Text.ToUpper();
            c.nombre = txtNombre.Text.ToUpper();
            if (cmbHabilitado.SelectedItem.Equals("HABILITADO")) c.habilitado = true;
            else c.habilitado = false;

            // No obligatorios
            c.estado_civil = (EstadoCivil)cmbEstadoCivil.SelectedItem;
            c.nacionalidad = (Pais)cmbNacionalidad.SelectedItem;
            if (txtTelefono.Text.Length != 0) c.telefono = Convert.ToInt32(txtTelefono.Text);
            if (txtCelular.Text.Length != 0) c.celular = Convert.ToInt32(txtCelular.Text);
            c.email = txtEmail.Text.ToUpper();
            c.calle = txtCalle.Text.ToUpper();
            c.numero = txtNumero.Text.ToUpper();
            c.piso = txtPiso.Text.ToUpper();
            c.departamento = txtDepartamento.Text.ToUpper();

            if (cmbLocalidad.SelectedItem != null)
            {
                c.ciudad = (Ciudad)cmbLocalidad.SelectedItem;
            }
            else
            {
                c.ciudad = ciudadvacia;
            }

            Clientes.actualizar(c);
            DialogResult = DialogResult.OK;
            Close();

        }

        private void cmbPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Provincia> provincias = Provincias.GetAllProvinciasPorPais((Pais)cmbPais.SelectedItem);
            cmbProvincia.Items.Clear();
            cmbLocalidad.Items.Clear();
            if (((Pais)cmbPais.SelectedItem).id != 0)
            {
                Provincia provinciavacia = new Provincia();
                foreach (Provincia p in provincias)
                {
                    cmbProvincia.Items.Add(p);
                }
                if (cmbProvincia.Items.Count > 0)
                    cmbProvincia.SelectedIndex = 0;
            }
        }

        private void cmbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Ciudad> ciudades = Ciudades.ObtenerCiudadesPorProvincia((Provincia)cmbProvincia.SelectedItem);
            cmbLocalidad.Items.Clear();
            foreach (Ciudad ciud in ciudades)
            {
                cmbLocalidad.Items.Add(ciud);
            }
            if (cmbLocalidad.Items.Count > 0)
                cmbLocalidad.SelectedIndex = 0;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            ep.Clear();
            
            // Validacion Tipo doc.
            if (cmbTipoDocumento.SelectedItem == null)
            {
                ep.SetError(cmbTipoDocumento, "Debe seleccionar el tipo de documento.");
                return;
            }

            // Validacion Numero documento
            if (txtNumeroDocumento.Text.Length == 0)
            {
                ep.SetError(txtNumeroDocumento, "Debe ingresar el numero de documento.");
                return;
            }

            if (!esNumerico(txtNumeroDocumento.Text))
            {
                ep.SetError(txtNumeroDocumento, "Debe ingresar un valor numerico.");
                return;
            }

            // Validacion Apellido
            if (txtApellido.Text.Length == 0)
            {
                ep.SetError(txtApellido, "Debe ingresar el apellido.");
                return;
            }

            // Validacion Nombre
            if (txtNombre.Text.Length == 0)
            {
                ep.SetError(txtNombre, "Debe ingresar el nombre.");
                return;
            }

            // Validacion Sexo
            if (cmbSexo.SelectedItem == null)
            {
                ep.SetError(cmbSexo, "Debe seleccionar el sexo.");
                return;
            }

            // Validacion Telefono
            if (txtTelefono.Text.Length != 0)
            {
                if (!esNumerico(txtTelefono.Text))
                {
                    ep.SetError(txtTelefono, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            // Validacion Celular
            if (txtCelular.Text.Length != 0)
            {
                if (!esNumerico(txtCelular.Text))
                {
                    ep.SetError(txtCelular, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            // Valido email
            if (txtEmail.Text.Length != 0)
            {
                if (!Utilities.validarEmail(txtEmail.Text.ToString()))
                {
                    ep.SetError(txtEmail, "Debe ingresar un mail valido.");
                    return;
                }
            }

            // Validacion Numero
            if (txtNumero.Text.Length != 0)
            {
                if (!esNumerico(txtNumero.Text))
                {
                    ep.SetError(txtNumero, "Debe ingresar un valor numerico.");
                    return;
                }
            }

            if (c.numero_documento.Equals(txtNumeroDocumento.Text) && (c.tipodocumento.id_tipo_documento == ((TipoDocumento)cmbTipoDocumento.SelectedItem).id_tipo_documento))
            {
                actualizarCliente(c);
            }
            else
            {
                Cliente cli = new Cliente();
                cli.numero_documento = txtNumeroDocumento.Text;
                cli.tipodocumento = (TipoDocumento)cmbTipoDocumento.SelectedItem;

                if (Clientes.verificarSiExiste(cli))
                {
                    MessageBox.Show("Para el Tipo y Numero de Documento ya existe un cliente ingresado ", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                }
                else
                {
                    actualizarCliente(c);
                }
            }
        }

        private void toolStripAyuda_Click(object sender, EventArgs e)
        {
            Utilities.mostrarAyuda(this, (this.GetType().ToString() + ".htm").Replace("SIGERP_Presentacion.", ""));
        }



    }
}
